package com.xxxtea.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.xxxtea.common.BaseEnum;
import com.xxxtea.config.converter.BaseEnumDeserializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;

import java.util.Date;

/**
 * 用户地址实体类
 *
 * 用于存储用户的收货地址信息，包括：
 * - 收件人信息（姓名、电话、地址等）
 * - 默认地址管理
 * - 用户地址关联
 *
 * 使用MyBatis-Plus注解进行数据库映射
 * 使用Swagger注解进行API文档生成
 *
 * @author badman
 * @since 1.0.0
 */
@Data
@ApiModel("用户地址")
@TableName(autoResultMap = true)
public class UserAddress {

	/**
	 * 主键ID
	 * 使用自增策略
	 */
	@ApiModelProperty("主键")
	@TableId(value = "id", type = IdType.AUTO)
	private Integer id;

	/**
	 * 用户ID
	 * 自动填充当前用户ID
	 */
	@ApiModelProperty("用户ID")
	@TableField(fill = FieldFill.INSERT)
	private Integer userId;

	/**
	 * 收件人姓名
	 * 支持模糊查询
	 */
	@TableField(condition = SqlCondition.LIKE)
	@ApiModelProperty("收件人")
	private String recipient;

	/**
	 * 收件人手机号
	 * 支持模糊查询
	 */
	@TableField(condition = SqlCondition.LIKE)
	@ApiModelProperty("手机号")
	private String phone;

	/**
	 * 详细地址
	 * 支持模糊查询
	 */
	@TableField(condition = SqlCondition.LIKE)
	@ApiModelProperty("详细地址")
	private String address;

	/**
	 * 是否默认地址
	 * 0-否 1-是
	 * 使用枚举类型管理
	 */
	@ApiModelProperty("是否默认 0-否 1-是")
	@JsonDeserialize(using = BaseEnumDeserializer.class)
	private IsDefault isDefault;

	/**
	 * 创建时间
	 * 自动填充插入时间
	 */
	@ApiModelProperty("创建时间")
	@TableField(fill = FieldFill.INSERT)
	private Date createTime;

	/**
	 * 是否默认枚举
	 * 定义地址的默认状态
	 */
	@Getter
	@AllArgsConstructor
	public enum IsDefault implements BaseEnum<IsDefault> {
		/**
		 * 非默认地址
		 */
		NO(0, "否"),
		/**
		 * 默认地址
		 */
		YES(1, "是"),
		;
		private final Integer value;
		private final String label;
	}
}